package com.jzo2o.market.utils;

import com.jzo2o.market.enums.ActivityTypeEnum;
import com.jzo2o.market.model.domain.Coupon;

import java.math.BigDecimal;
import java.math.RoundingMode;

/**
 * 优惠券相关工具
 */
public class CouponUtils {
    /**
     * 计算优惠券可抵扣的金额
     *
     * @param coupon      优惠券信息
     * @param totalAmount 订单总金额
     * @return 实际优惠金额（不满足条件时返回0）
     */
    public static BigDecimal calDiscountAmount(Coupon coupon, BigDecimal totalAmount) {
        // 满减类型优惠券
        if (ActivityTypeEnum.AMOUNT_DISCOUNT.equals(coupon.getType())) {
            BigDecimal amountCondition = coupon.getAmountCondition(); // 满减门槛
            BigDecimal discountAmount = coupon.getDiscountAmount();   // 满减金额
            // 订单金额未达到满减门槛，不优惠
            if (totalAmount.compareTo(amountCondition) < 0) {
                return BigDecimal.ZERO;
            }
            return discountAmount; // 达到门槛，返回满减金额
        }
        // 折扣类型优惠券
        else {
            Integer discountRate = coupon.getDiscountRate(); // 折扣率（如80表示8折）

            // 折扣率不合法（需0-100之间），不优惠
            if (discountRate >= 100 || discountRate <= 0) {
                return BigDecimal.ZERO;
            }

            // 计算优惠比例（如8折 → 优惠20% → 100-80=20 → 20/100=0.2）
            BigDecimal rate = new BigDecimal(100 - discountRate)
                    .divide(new BigDecimal(100), 2, RoundingMode.DOWN);

            // 优惠金额 = 订单金额 × 优惠比例
            return totalAmount.multiply(rate);
        }
    }
}
